As more and more services and information are made available over the Internet and intranets, Web sites have become extraordinarily complex, while their correctness is often crucial to the success of businesses and organizations. Although traditional software testing is already a notoriously hard, time-consuming and expensive process, Web-site testing presents even greater challenges. Indeed, unlike traditional GUIs (graphical user interfaces), Web interfaces are very dynamic. Web pages are modified frequently: adding links, making user-specific customizations (some pages change every time they are requested), adding new features, or changing a site look-and-feel. Moreover, the environment of Web applications is more complex than that of typical monolithic or client-server applications—Web applications interact with many components, such as CGI (common gateway interface) scripts, browsers, backend databases, proxy servers, etc., which may increase the risk of interoperability issues. Furthermore, many Web applications have a large number of users with no training on how to use the application—they are likely to exercise it in unpredictable ways. Therefore, Web sites that are critical to business operations of an organization should be tested thoroughly and frequently.
Static components of Web sites can be automatically tested by existing spider-like programs (or Web crawlers), which recursively follow all possible static links from a Web page in search of errors such as broken links, misspellings, and HTML (hypertext markup language)—conformance violations. For automatically testing dynamic components, which include execution of so-called client-side scripts and form interactions, the only class of tools currently available are “capture-replay” tools that record specific user-defined testing scenarios, and then generate scripts (sequences of browsers actions) that can be run on browsers in order to automatically replay the recorded scenarios for regression testing. Because Web sites are increasingly complex, manually recording a sample set of testing scenarios with a capture-replay tool can be very time-consuming. Due to the impossibility of recording more than a few possible paths, site coverage using capture-replay tools ends up being typically limited to a small portion of the Web-site functionality. Moreover, although state-of-the-art capture-replay tools do provide some level of abstraction when recording user actions and increased portability of test scenarios (for instance, by recording general browser actions instead of mouse actions on specific screen coordinates), changes in the structure of a Web site may prevent previously recorded test scenarios from being replayed and, hence, may require re-generating and re-recording a new set of test scenarios from scratch.